// int i : index of the currently processed section
void *symbolRefAddress = sectionAddressMemory[i] + coffReloc.virtualAddress


// void *symbolOffset : the symbol offset in its definition section
// CoffSymbol *coffSymbol : the current symbol

uint64_t symbolDefAddress = (uint64_t)symbolOffset + (uint64_t)sectionAddressMemory[coffSymbol->sectionIndex];

CopyMemory(symbolRefAddress, &symbolDefAddress, sizeof(uint64_t));

Вроде можно пока забит на coffReloc.type ?! Но coffReloc.type скажет сколько байт изменить в коде.

В coffReloc(size 10 байт) секции идет:
startCode+this 4 байт, 4 bytes this(indxSection)  это может быть data or strings table !
И DW type

Важно ! В  самом коде бывает codeOffsetData. Тогда section data+codeOffsetData

Например в секции data: db 'text1',0,'some else text',0 

И в коде надо сместиться на 'some else text'.
Секция будет такая же например 2 и +codeOffsetData = смещение на 'some else text'

Type when .Machine = 14C (intel 386)
IMAGE_REL_I386_ABSOLUTE =	0x0000	Перемещение игнорируется.
IMAGE_REL_I386_DIR16 =		0x0001	Не поддерживается.
IMAGE_REL_I386_REL16 =		0x0002	Не поддерживается.
IMAGE_REL_I386_DIR32 =		0x0006	32-разрядная va целевого объекта.
IMAGE_REL_I386_DIR32NB =	0x0007	32-разрядная RVA целевого объекта. 

Type when .Machine = 0x8664 (AMD64 64bit)
IMAGE_REL_AMD64_ABSOLUTE = 0
IMAGE_REL_AMD64_ADDR64 = 1
IMAGE_REL_AMD64_ADDR32 = 2
IMAGE_REL_AMD64_ADDR32NB = 3
IMAGE_REL_AMD64_REL32  = 4
IMAGE_REL_AMD64_REL32_1  = 5
IMAGE_REL_AMD64_REL32_2  = 6
IMAGE_REL_AMD64_REL32_3  = 7
IMAGE_REL_AMD64_REL32_4  = 8
IMAGE_REL_AMD64_REL32_5  = 9

машин много ! arm и много других.